const path = require('path')

const Koa = require('koa')
const koalogger = require('koa-logger') // 日志
const cors = require('@koa/cors') // 允许跨域
const json = require('koa-json') // 用于将http响应的数据转换为json格式
const { koaBody } = require('koa-body') // 解析http请求的消息体
const { addAliases } = require('module-alias') // 配置别名
const parameter = require('koa-parameter') // 接口参数校验

addAliases({'@': __dirname})
const { APP_PORT } = require('@/config/config.default')
const userRouter = require('@/router')
const errHandler = require('@/constant/errHandler')
const authMiddleware = require('./middleware')

const app = new Koa()
app.use(koaBody({
  multipart: true, // 是否支持文件上传 打开
  formidable: { // 文件上传 详细配置
    uploadDir: path.join(__dirname,'./upload'), // 文件上传存放目录
    keepExtensions: true, // 保持后缀名 打开
    //maxFieldsSize:2 * 1024 * 1024, // 所有的字段大小(不包括文件,默认是20M)
    //maxFileSize: 200*1024*1024,    //上传的文件大小限制,默认是200M
    onFileBegin:(name,file) => { // 文件上传前的设置
        // console.log(`name: ${name}`);
        // console.log(file);
        //检查上传的目录是否存在
        let upFolder = path.resolve(__dirname,'upload')   //放置于public目录(也就是静态资源目录,才好前端页面直接引用)
        let flag = fs.existsSync(upFolder)
        if(!flag) {   //如果目录不存在,先创建
            fs.mkdirSync(upFolder)
        }
    },
  }
}))

app.use(cors())
app.use(koalogger())
app.use(json())

// token鉴权 日志
authMiddleware(app)

// 参数校验插件
app.use(parameter(app))

// 统一错误处理
app.on('error', errHandler)

// 注册路由
app.use(userRouter.routes()).use(userRouter.allowedMethods())


app.listen(APP_PORT, () => {
  console.log('server is running on http://localhost:8081')
})